#include <iostream>
#include <string>
#include "proxy/proxy.h"  // 确保正确引入 Proxy 库头文件


/*

// 定义一个支持反射的 Facade 类型
struct Reflectable : pro::facade_builder
                     ::add_reflection<pro::accessor_dispatch>  // 添加反射支持
                     ::build {};

// 定义一个简单的类用于反射
class MyClass {
public:
    std::string name;
    int age;

    MyClass(const std::string& name, int age) : name(name), age(age) {}

    // 定义一个反射函数，用于获取和设置属性
    void Reflect(pro::reflector& r) {
        r.Define("name", name);
        r.Define("age", age);
    }
};

int main() {
    // 创建 MyClass 对象
    MyClass obj("Alice", 30);

    // 创建代理对象
    pro::proxy<Reflectable> p = pro::make_proxy<Reflectable>(obj);

    // 使用反射获取属性值
    std::cout << "Name: " << p.reflect().Get<std::string>("name") << std::endl;
    std::cout << "Age: " << p.reflect().Get<int>("age") << std::endl;

    // 使用反射修改属性值
    p.reflect().Set<std::string>("name", "Bob");
    p.reflect().Set<int>("age", 25);

    // 验证修改后的值
    std::cout << "Updated Name: " << p.reflect().Get<std::string>("name") << std::endl;
    std::cout << "Updated Age: " << p.reflect().Get<int>("age") << std::endl;

    return 0;
}*/
